// 不同类型装饰器的执行顺序
/**
 * 1. 属性装饰器、方法装饰器、访问装饰器它们是按照在类中出现的顺序，从上往下依次执行
 * 2. 类装饰器最后执行
 * 3. 参数装饰器是跟方法装饰器绑定在一起，但是参数访问器器会在方法装饰器之前执行
 * 4. 多个相同类型装饰器，从下往上执行
 * 5. 如果一个方法有对个参数，参数装饰器会从右向左执行，一条参数也可有多个参数装饰器，这些装饰器也是从右向左执行的
 */

function classDecorator() {
  console.log('classDecorator');
}
function propertyDecorator() {
  console.log('propertyDecorator');
}

function accessDecorator() {
  console.log('accessDecorator');
}

function methodDecorator() {
  console.log('methodDecorator');
}

// @ts-ignore
@classDecorator
class Example {
  // @ts-ignore
  @methodDecorator
  method() {}
  // @ts-ignore
  @accessDecorator
  get myProp(){
    return 'myProp'
  }
  // @ts-ignore
  @propertyDecorator
  prop: string;

}
